package com.itextpdf.text.pdf.table; import com.itextpdf.testutils.CompareTool; import com.itextpdf.testutils.TestResourceUtils; import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ColorsInTaggedDocumentsTest { private String cmpFolder = "./src/test/resources/com/itextpdf/text/pdf/table/tableColorsTest/"; private String outFolder = "./target/com/itextpdf/text/pdf/table/tableColorsTest/"; @Before public void setUp() throws Exception { new File(outFolder).mkdirs(); TestResourceUtils.purgeTempFiles(); } @Test public void colorsInTaggedDocumentsTest1() throws IOException, DocumentException, InterruptedException, ParserConfigurationException, SAXException { String output = "coloredTables.pdf"; String cmp = "cmp_coloredTables.pdf"; createColoredTablesFile(outFolder + output, true); compareDocuments(output, cmp, false); } @Test public void colorsInTaggedDocumentsTest2() throws IOException, DocumentException, InterruptedException, ParserConfigurationException, SAXException { String output = "coloredTables.pdf"; String cmp = "cmp_coloredTables.pdf"; //visually comparing results of tagged and non-tagged colored tables createColoredTablesFile(outFolder + output, false); compareDocuments(output, cmp, true); } private void createColoredTablesFile(String outPath, boolean tagged) throws FileNotFoundException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outPath)); if (tagged) writer.setTagged(); document.open(); BaseColor color = new BaseColor(255,255,240); Font coloredFont = new Font(Font.FontFamily.HELVETICA, 12f, Font.NORMAL, color); //First table PdfPTable table = new PdfPTable(4); int rowsNum = 10; int columnsNum = 4; for (int i = 0; i < rowsNum; ++i) { for (int j = 0; j < columnsNum; ++j) { PdfPCell cell = new PdfPCell(new Paragraph("text", coloredFont)); cell.setBorderWidth(2); cell.setBorderColor(BaseColor.DARK_GRAY); cell.setBackgroundColor(BaseColor.LIGHT_GRAY); table.addCell(cell); } } document.add(table); document.newPage(); Font fontRed = new Font(Font.FontFamily.HELVETICA, 12f, Font.NORMAL, new BaseColor(255, 0, 0)); Font fontGreen = new Font(Font.FontFamily.HELVETICA, 12f, Font.NORMAL, new BaseColor(0, 255, 0)); Font fontBlue = new Font(Font.FontFamily.HELVETICA, 12f, Font.NORMAL, new BaseColor(0, 0, 255)); //Second table table = new PdfPTable(4); PdfPCell cell11 = new PdfPCell(new Paragraph("text", fontRed)); PdfPCell cell12 = new PdfPCell(new Paragraph("text", fontBlue)); PdfPCell cell13 = new PdfPCell(new Paragraph("text", fontGreen)); PdfPCell cell21 = new PdfPCell(new Paragraph("text", fontRed)); PdfPCell cell22 = new PdfPCell(new Paragraph("text", fontGreen)); PdfPCell cell23 = new PdfPCell(new Paragraph("text", fontBlue)); PdfPCell cell32 = new PdfPCell(new Paragraph("text", fontBlue)); PdfPCell cell33 = new PdfPCell(new Paragraph("text", fontRed)); PdfPCell cell34 = new PdfPCell(new Paragraph("text", fontGreen)); table.addCell(cell11); table.addCell(cell12); table.addCell(cell13); table.addCell(cell21); table.addCell(cell22); table.addCell(cell23); table.addCell(cell32); table.addCell(cell33); table.addCell(cell34); document.add(table); document.add(new Phrase(" ")); //Third table table = new PdfPTable(4); cell11 = new PdfPCell(new Paragraph("text", fontRed)); cell11.setBackgroundColor(BaseColor.YELLOW); cell11.setBorderWidth(3); cell11.setBorderColor(new BaseColor(0, 0, 255)); cell12 = new PdfPCell(new Paragraph("text", fontBlue)); cell13 = new PdfPCell(new Paragraph("text", fontGreen)); cell21 = new PdfPCell(new Paragraph("text", fontRed)); cell21.setBackgroundColor(BaseColor.LIGHT_GRAY); cell21.setBorderColor(BaseColor.PINK); cell21.setBorderWidth(3); cell22 = new PdfPCell(new Paragraph("text", fontGreen)); cell22.setBackgroundColor(BaseColor.YELLOW); cell22.setBorderColor(BaseColor.BLUE); cell22.setBorderWidth(3); cell23 = new PdfPCell(new Paragraph("text", fontBlue)); cell23.setBackgroundColor(BaseColor.GREEN); cell23.setBorderWidth(3); cell23.setBorderColor(BaseColor.WHITE); cell32 = new PdfPCell(new Paragraph("text", fontBlue)); cell32.setBackgroundColor(BaseColor.LIGHT_GRAY); cell32.setBorderColor(BaseColor.MAGENTA); cell32.setBorderWidth(3); cell33 = new PdfPCell(new Paragraph("text", fontRed)); cell33.setBackgroundColor(BaseColor.PINK); cell33.setBorderColor(BaseColor.CYAN); cell33.setBorderWidth(3); cell34 = new PdfPCell(new Paragraph("text", fontGreen)); cell34.setBackgroundColor(BaseColor.ORANGE); cell34.setBorderColor(BaseColor.WHITE); cell34.setBorderWidth(3); table.addCell(cell11); table.addCell(cell12); table.addCell(cell13); table.addCell(cell21); table.addCell(cell22); table.addCell(cell23); table.addCell(cell32); table.addCell(cell33); table.addCell(cell34); document.add(table); document.close(); } private void compareDocuments(String out, String cmp, boolean visuallyOnly) throws DocumentException, InterruptedException, IOException { CompareTool compareTool = new CompareTool(); String errorMessage; if (visuallyOnly) { errorMessage = compareTool.compare(outFolder + out, cmpFolder + cmp, outFolder, "diff"); } else { errorMessage = compareTool.compareByContent(outFolder + out, cmpFolder + cmp, outFolder, "diff"); } if (errorMessage != null) Assert.fail(errorMessage); } }